MJExtention 对不规范 JSON 解析的一个测试

Context

今天受 MJ 老师吩咐,测试 MJExtension 对于不规范的 JSON 的解析情况.特记录于此

说明几点

何为不规范

我说的不规则指的是有一定容错能力,但是前提还是 JSON,弄些乱七八糟的字符串就没有意义了哈.比如说,这次我想测试的是前一段事件遇到的一个小问题:服务端返回的是类似这样的一个结果:

为了展现,截图是规范的 JSON,服务端给我的实际数据是:
两个箭头指向处还有 " .

换句话说,他是严格执行的: "键":"无论啥类型" . 网上大多数的所谓的 JSON 格式校验工具认为这种格式是 okay 的,但是它的问题是,没法继续”钻下去” ,这里就是我所说的 “不规范”.
说到这里,推荐个地址 在线校验,这个不仅仅是校验,还有格式化功能.支持按层级折叠和展开.

准备工作

  • 更新 podfile ,以获取最新的 MJExtension 代码.
  • 因为现在服务端已经更改,所以才用从本地文件读取的方式,新建一个 json 文件,放到沙盒中.测试数据已经分享到 百度网盘

链接: http://pan.baidu.com/s/1qWA1Na8 密码: dvwb

大家也可以使用自己的数据进行测试,毕竟就是加两个英文引号.

测试

无引号版本(规范的 JSON )

1
2
3
4
5
6
7
8
9
10
11
12
NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

NSString *path=[paths objectAtIndex:0];

NSString *Json_path=[path stringByAppendingPathComponent:@"JsonFile.json"];

NSData *data=[NSData dataWithContentsOfFile:Json_path];
//自带解析方式
id JsonObject=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

//MJ Extension
GQResponeseStatusModel* statusModel = [GQResponeseStatusModel objectWithJSONData:data];

lldb 看到 data 有数据,说明读取正常,一路断点的也都有值,最后数据正常读取显示.

2.有引号版本

在我的文件中的:这两个位置,用引号括起来.即 json 这个 key,对应的有 “ 的 value .

现在拿到数据到刚刚推荐的网址上,结果提示:

继续跑代码:

结果:

data 有值.

自带的 JSON 解析结果为 nil

MJExtension 之后,模型的四个属性为nil (MJ老师也说了,MJExtension 基于苹果自带的 API )

好了,因为暂时遇到的情况就这一个.所以就采取个案例做个小测试.算是完成了老师的嘱托啊~~

后记:

  1. 当时服务端正在忙着做其他事情,没有时间给我改返回的格式.所以才用了分次解析的方式.先拿到 json 的 value 值,然后从这一层开始使用 MJExtension ,也完成了任务.

  2. 如果有可能,大家按照统一的规范进行开发,是最省时省力又舒畅的.